java如何连接到用户选择的SSID?
我正在完成我的论文,我正在开发一个ANdroid应用程序来配置物联网家用设备(wifi)。在这种情况下,使用Rspberry Pi 3模拟设备,它创建一个具有已知名称(即AutoDevAP NameOfDevice)的接入点(捕获门户,无密码)。我的应用程序正在智能手机的范围内显示现有的SSID,并允许用户选择其中一个SSID并进行连接(在这种情况下,应用程序仅用于连接此类型的SSID。问题是:在用户选择要连接的SSID(AutoDevAP SmartSwitch)后,我启动另一个活动以连接到此SSID,但是我被卡住了,因为智能手机从未连接到它,我使用的逻辑与我开发应用程序时使用的逻辑相同,总是连接到同一个SSID,而不使用密码,但它不会工作。起初我教他们问题出在适配器侦听器上,但我已经调试了代码,并不是那个问题。 它正在接受棒棒糖测试
我的代码:MainActivity。爪哇
import 安卓.app.Activity;
import 安卓.content.BroadcastReceiver;
import 安卓.content.Context;
import 安卓.content.Intent;
import 安卓.content.IntentFilter;
import 安卓.net.wifi.ScanResult;
import 安卓.net.wifi.WifiConfiguration;
import 安卓.net.wifi.WifiManager;
import 安卓.os.Handler;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.os.Bundle;
import 安卓.util.Log;
import 安卓.view.Menu;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓.widget.AdapterView;
import 安卓.widget.ArrayAdapter;
import 安卓.widget.ListView;
import 安卓.widget.Toast;
import 安卓.widget.ToggleButton;
import java.util.List;
public class MainActivity extends Activity {
WifiManager wifiManager;
private BroadcastReceiver wifiReciever;
private ArrayAdapter adapter;
ListView listview ;
private String nameOfDev;
private Handler mainHandler;
private Thread connectAPThread;
static String info = null;
static String ssidInfo;
static String devName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview= (ListView) findViewById(R.id.listView);
adapter = new ArrayAdapter
(this,安卓.R.layout.simple_list_item_1);
listview.setAdapter(adapter);
wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
mainHandler = new Handler(this.getMainLooper());
wifiReciever = new WiFiScanReceiver();
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String s = listview.getItemAtPosition(i).toString();
info =s;
Toast.makeText(getApplicationContext(), info, Toast.LENGTH_LONG).show();
ssidInfo= getSSIDInfo(info);
Toast.makeText(getApplicationContext(), ssidInfo, Toast.LENGTH_SHORT).show();
devName=getDeviceName(info);
Toast.makeText(getApplicationContext(), devName, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this,ConnectWifiActivity.class);
intent.putExtra("ssid",ssidInfo);
intent.putExtra("devName",devName);
startActivity(intent);
}
});
}
public String getSSIDInfo(String s){
String[] things = s.split(",");
String[] cenas = things[0].split(":");
String ssid = cenas[1];
// Toast.makeText(getApplicationContext(), ssid, Toast.LENGTH_LONG).show();
// Toast.makeText(getApplicationContext(), nameOfDev, Toast.LENGTH_LONG).show();
return ssid;
}
public String getDeviceName(String s){
String[] things = s.split(",");
String[] cenas = things[0].split(":");
String ssid = cenas[1];
// Toast.makeText(getApplicationContext(), ssid, Toast.LENGTH_LONG).show();
String[] outras = ssid.split("-");
String nameOfDev = outras[1];
// Toast.makeText(getApplicationContext(), nameOfDev, Toast.LENGTH_LONG).show();
return nameOfDev;
}
public void onToggleClicked(View view) {
adapter.clear();
ToggleButton toggleButton = (ToggleButton) view;
if (wifiManager == null) {
// Device does not support Wi-Fi
Toast.makeText(getApplicationContext(), "Oop! Your device does not support Wi-Fi",
Toast.LENGTH_SHORT).show();
toggleButton.setChecked(false);
} else {
if (toggleButton.isChecked()) { // To turn on Wi-Fi
Toast.makeText(getApplicationContext(), "Wi-Fi is turning on." +
"\n" + "Scanning for access points...",
Toast.LENGTH_SHORT).show();
wifiManager.setWifiEnabled(true);
Toast.makeText(getApplicationContext(), "Wi-Fi is already turned on." +
"\n" + "Scanning for access points...",
Toast.LENGTH_SHORT).show();
wifiManager.startScan();
} else { // To turn off Wi-Fi
Toast.makeText(getApplicationContext(), "Wi-Fi is turned off.",
Toast.LENGTH_SHORT).show();
wifiManager.setWifiEnabled(false);
}
}
}
protected void onResume() {
super.onResume();
// Register the BroadcastReceiver for SCAN_RESULTS_AVAILABLE_ACTION
IntentFilter filter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(wifiReciever, filter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(wifiReciever);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.wi_fi, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
class WiFiScanReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {
List<ScanResult> wifiScanResultList = wifiManager.getScanResults();
for(int i = 0; i < wifiScanResultList.size(); i++){
String hotspot = (wifiScanResultList.get(i)).toString();
adapter.add(hotspot);
}
}
}
}
}
主要活动。xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
tools:context="bernardo.autodevconfiguration.MainActivity">
<ToggleButton
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:id="@+id/toggleButton"
安卓:textOn="Wi-Fi On"
安卓:textOff="Wi-Fi Off"
安卓:onClick="onToggleClicked"
安卓:layout_alignParentTop="true"
安卓:layout_alignParentLeft="true"
安卓:layout_alignParentStart="true" />
<ListView
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:id="@+id/listView"
安卓:layout_centerHorizontal="true"
安卓:layout_below="@+id/toggleButton" />
</RelativeLayout>
连接活动。爪哇
import 安卓.app.Activity;
import 安卓.content.Context;
import 安卓.content.Intent;
import 安卓.net.wifi.WifiConfiguration;
import 安卓.net.wifi.WifiInfo;
import 安卓.net.wifi.WifiManager;
import 安卓.os.Bundle;
import 安卓.os.Handler;
import 安卓.util.Log;
import 安卓.view.View;
import 安卓.view.WindowManager;
import 安卓.widget.Button;
import java.util.List;
/**
* Created by bernardo on 19-03-2017.
*/
public class ConnectWifiActivity extends Activity {
private WifiManager wifiManager;
private Handler mainHandler;
private String ssid;
private String devName;
private Button connectButton;
private Thread wifiThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_connctwifi);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
Intent intent = getIntent();
ssid= intent.getStringExtra("ssid");
devName=intent.getStringExtra("devName");
connectButton = (Button)findViewById(R.id.connect);
connectButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//connectToAP();
wifiThread = new Thread(runnable, "turn-on wifi");
wifiThread.start();
}
});
mainHandler = new Handler(this.getMainLooper());
}
Runnable runnable = new Runnable() {
@Override
public void run() {
while (true) {
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager.isWifiEnabled()) {
Log.d("State", "wifi-on");
WifiConfiguration wfc = new WifiConfiguration();
wfc.SSID = "\"".concat(ssid).concat("\"");
wfc.status = WifiConfiguration.Status.DISABLED;
wfc.priority = 40;
wfc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wfc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wfc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
wfc.allowedAuthAlgorithms.clear();
wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
int networkId = wifiManager.addNetwork(wfc);
if (networkId != -1) {
// success, can call wfMgr.enableNetwork(networkId, true) to connect
wifiManager.enableNetwork(networkId, true);
}
} else {
Log.d("not connected", "trying to connect");
Log.d("State", "set wifi on");
wifiManager.setWifiEnabled(true);
WifiConfiguration wfc = new WifiConfiguration();
wfc.SSID = "\"".concat(ssid).concat("\"");
wfc.status = WifiConfiguration.Status.DISABLED;
wfc.priority = 40;
wfc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wfc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wfc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
wfc.allowedAuthAlgorithms.clear();
wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
int networkId = wifiManager.addNetwork(wfc);
if (networkId != -1) {
// success, can call wfMgr.enableNetwork(networkId, true) to connect
wifiManager.enableNetwork(networkId, true);
}
}
}
}
};
}
活动连接WiFi。xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
tools:context="bernardo.autodevconfiguration.ConnectWifiActivity">
<Button
安卓:text="Connect to your device"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:id="@+id/connect"
安卓:layout_alignParentTop="true"
安卓:layout_centerHorizontal="true"
安卓:layout_marginTop="109dp"
安卓:onClick="selfDestruct"/>
</RelativeLayout>
AndroidManifest。xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
package="bernardo.autodevconfiguration">
<uses-permission 安卓:name="安卓.permission.INTERNET" />
<uses-permission 安卓:name="安卓.permission.CHANGE_CONFIGURATION" />
<uses-permission 安卓:name="安卓.permission.CHANGE_NETWORK_STATE" />
<uses-permission 安卓:name="安卓.permission.ACCESS_NETWORK_STATE" />
<uses-permission 安卓:name="安卓.permission.ACCESS_WIFI_STATE" />
<uses-permission 安卓:name="安卓.permission.CHANGE_WIFI_STATE" />
<application
安卓:allowBackup="true"
安卓:icon="@mipmap/ic_launcher"
安卓:label="@string/app_name"
安卓:roundIcon="@mipmap/ic_launcher_round"
安卓:supportsRtl="true"
安卓:theme="@style/AppTheme">
<activity 安卓:name=".MainActivity">
<intent-filter>
<action 安卓:name="安卓.intent.action.MAIN" />
<category 安卓:name="安卓.intent.category.LAUNCHER" />
<action 安卓:name="安卓.net.wifi.WIFI_STATE_CHANGED" />
<!--<action 安卓:name="安卓.net.wifi.STATE_CHANGE" />-->
<category 安卓:name="安卓.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
安卓:name="bernardo.autodevconfiguration.ConnectWifiActivity">
共 (0) 个答案